package com.pick.base.annotation;

import java.lang.annotation.*;

/**
 * 限流注解
 * 用于方法级别的限流控制
 *
 * @author pick
 * @since 2024-01-01
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimit {

    /**
     * 限流键的前缀
     * 默认使用方法的全限定名
     */
    String key() default "";

    /**
     * 时间窗口大小（秒）
     * 默认60秒
     */
    int window() default 60;

    /**
     * 限制次数
     * 默认100次
     */
    int limit() default 100;

    /**
     * 限流类型
     */
    LimitType type() default LimitType.IP;

    /**
     * 超过限制时的提示信息
     */
    String message() default "请求过于频繁，请稍后再试";

    /**
     * 限流类型枚举
     */
    enum LimitType {
        /**
         * 根据IP限流
         */
        IP,
        
        /**
         * 根据用户限流
         */
        USER,
        
        /**
         * 全局限流
         */
        GLOBAL,
        
        /**
         * 自定义限流（使用key参数）
         */
        CUSTOM
    }
}